package top.ezzz.util;

import top.ezzz.model.ProcessInfo;
import top.ezzz.util.processtype.Holder;
import top.ezzz.util.processtype.ProcessContext;
import top.ezzz.util.processtype.TypeInterface;

import java.util.List;

public class ProcessUtil {

    private static final Holder holder = new Holder();

    /**
     * 获取指定类型的进程列表
     * @param processType 进程类型 (java, python, cpp, port)
     * @return 进程信息列表
     */
    public static List<ProcessInfo> getProcessesByType(String processType) {
        TypeInterface strategy = holder.getProcessType(processType);
        if (strategy == null) {
            return List.of();
        }
        
        ProcessContext context = new ProcessContext(strategy);
        return context.monitor();
    }

    /**
     * 获取所有类型的进程列表
     * @return 所有进程信息列表
     */
    public static List<ProcessInfo> getAllProcesses() {
        List<ProcessInfo> allProcesses = new java.util.ArrayList<>();
        
        // 获取各种类型的进程
        allProcesses.addAll(getProcessesByType(Holder.JAVA_PROCESS));
        allProcesses.addAll(getProcessesByType(Holder.PYTHON_PROCESS));
        allProcesses.addAll(getProcessesByType(Holder.CPP_PROCESS));
        allProcesses.addAll(getProcessesByType(Holder.PORT_PROCESS));
        
        return allProcesses;
    }

    /**
     * 获取可用的进程类型列表
     * @return 进程类型列表
     */
    public static List<String> getAvailableProcessTypes() {
        return List.of(
            Holder.JAVA_PROCESS,
            Holder.PYTHON_PROCESS,
            Holder.CPP_PROCESS,
            Holder.PORT_PROCESS
        );
    }
}
